package br.com.ifpbmonteiro.pibict.photogeo.dados;

import java.util.ArrayList;
import java.util.HashMap;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteConstraintException;
import br.com.ifpbmonteiro.pibict.photogeo.objetos.FotografiaAnotada;

public class FotografiaAnotadaCRUD implements FotografiaAnotadaCrudIF  {

	private Context context;
	
	public FotografiaAnotadaCRUD(Context context) {
		// TODO Auto-generated constructor stub
		FotografiasBaseDeDados.getInstance(context);
		this.context = context;
	}
	

	@Override
	public long adicionaFotografia(
			FotografiaAnotada fotografiaAnotada)
			throws SQLiteConstraintException {

		ContentValues contentValues = new ContentValues();
		contentValues.put("fotografia_src",
				fotografiaAnotada.getFotografiaSrc());
		contentValues.put("fotografia_altura",
				fotografiaAnotada.getFotografiaAltura());
		contentValues.put("fotografia_largura",
				fotografiaAnotada.getFotografiaLargura());
		contentValues.put("quantidade_faces", fotografiaAnotada
				.getFacesDetectadas().size());

		return FotografiasBaseDeDados.getInstance(context).getWritableDatabase().insert(
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB, null,
				contentValues);

	}
	
	@Override
	public void removeFotografiaAnotada(int id) {

		FotografiasBaseDeDados.getInstance(context).getWritableDatabase().delete(FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB, FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS[0]+" = "+id, null);
	}


	@Override
	public ArrayList<FotografiaAnotada> carregaFotografiasAnotadas() {
		Cursor cursor = FotografiasBaseDeDados.getInstance(context).getReadableDatabase()
				.query(FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB,
						FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS,
						null, null, null, null, null);

		ArrayList<FotografiaAnotada> fotosAnotadas = new ArrayList<FotografiaAnotada>();

		cursor.moveToFirst();
		while (cursor.moveToNext()) {

			fotosAnotadas.add(cursorParaFotografiaAnotada(cursor));

		}

		return fotosAnotadas;

	}

	@Override
	public void atualizaFotografiaAnotada(FotografiaAnotada fotografiaAnotada) {

		ContentValues contentValues = new ContentValues();
		contentValues.put("fotografia_src",
				fotografiaAnotada.getFotografiaSrc());
		contentValues.put("fotografia_altura",
				fotografiaAnotada.getFotografiaAltura());
		contentValues.put("fotografia_largura",
				fotografiaAnotada.getFotografiaLargura());
		contentValues.put("quantidade_faces", fotografiaAnotada
				.getFacesDetectadas().size());

		FotografiasBaseDeDados.getInstance(context).getWritableDatabase().update(
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB,
				contentValues,
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS[0] + " = "
						+ fotografiaAnotada.getId(), null);

	}

	@Override
	@SuppressLint("UseSparseArrays")
	public HashMap<Integer, FotografiaAnotada> preencheMapaFotografiasAnotadas() {

		Cursor cursor = FotografiasBaseDeDados.getInstance(context).getReadableDatabase()
				.query(FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB,
						FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS,
						null, null, null, null, null);

		HashMap<Integer, FotografiaAnotada> fotosAnotadas = new HashMap<Integer, FotografiaAnotada>();

		cursor.moveToFirst();
		while (cursor.moveToNext()) {

			fotosAnotadas.put(cursor.getInt(0),
					cursorParaFotografiaAnotada(cursor));

		}

		return fotosAnotadas;

	}

	@Override
	public int buscaIdPorSrc(FotografiaAnotada fotografiaAnotada) {

		Cursor cursor = FotografiasBaseDeDados.getInstance(context).getWritableDatabase().query(
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_NOME_TB,
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS,
				FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS[0] + " like '"
						+ fotografiaAnotada.getFotografiaSrc() + "'", null,
				null, null, null, "1");

		return cursor.getInt(cursor.getColumnIndex(FotografiasBaseDeDados.FOTOGRAFIA_ANOTADA_COLS[0]));
	}

	@Override
	public FotografiaAnotada buscaFotografiaPorId() {

		return new FotografiaAnotada();
	}

	@Override
	public FotografiaAnotada cursorParaFotografiaAnotada(Cursor cursor) {
		FotografiaAnotada fotografiaAnotada = new FotografiaAnotada();

		fotografiaAnotada.setId(cursor.getInt(0));
		fotografiaAnotada.setFotografiaSrc(cursor.getString(1));
		fotografiaAnotada.setFotografiaAltura(cursor.getFloat(2));
		fotografiaAnotada.setFotografiaLargura(cursor.getFloat(3));
		fotografiaAnotada.setFacesDetectadas(null);

		return fotografiaAnotada;

	}

}
